package com.mark.web.bill.service;

import com.github.pagehelper.PageInfo;
import com.mark.common.ServerResponse;
import com.mark.web.bill.entity.po.Account;
import com.mark.web.bill.entity.vo.AccountVo;
import com.mark.web.common.entity.vo.echarts.LineChartVo;

import java.util.Map;

public interface IAccountService {

    /**
     * 添加一条个人账单信息
     * @param account ：个人账单信息
     * @return ：
     */
    ServerResponse<String> add(Account account);

    /**
     * 查找搜索时间范围内的账单信息列表
     * @param start ：搜索开始时间戳
     * @param end ：搜索结束时间戳
     * @param pageNum ：页数
     * @param pageSize ：页面大小
     * @param currentUserId ：当前用户ID
     * @return ：返回当前用户的在搜索时间范围内的个人账单信息列表
     */
    ServerResponse<PageInfo<AccountVo>> getAccountListBySearchTime(Long start, Long end, int pageNum, int pageSize, int currentUserId);

    /**
     * 查找搜索时间范围内的账单统计信息（总额，已经结算总额，未结算总额，总加工零件数量）
     * @param start ：搜索开始时间
     * @param end ：搜索结束时间
     * @param currentUserId ：当前用户ID
     * @return ：找搜索时间范围内的账单统计信息
     */
    ServerResponse<Map<String, Object>> getStatisticalInfo(Long start, Long end, int currentUserId);

    /**
     * 获取搜索时间范围内的账单趋势信息
     * @param start：搜索开始时间戳
     * @param end：搜索结束时间戳
     * @param totalPriceData ：是否查看总价趋势；默认为查看价格趋势图，false表示查找加工零件趋势
     * @param currentUserId ：当前用户id
     * @return ：
     */
    ServerResponse<LineChartVo> getLineData(Long start, Long end, int currentUserId, Boolean totalPriceData);

    /**
     * 自定加工零件的价格和数量方法添加账单记录
     * @param account ：待添加的账单实例
     * @return ：
     */
    ServerResponse<String> addNotGoods(Account account);

    /**
     * 根据id和当前用户id删除一条记录
     * @param currentUserId ：当前用户id
     * @param id ：账单记录id
     * @return ：
     */
    ServerResponse<String> delete(int currentUserId, Integer id);

    /**
     * 自定加工零件的价格和数量方法编辑账单记录
     * @param account ：账单信息实例
     * @return ：
     */
    ServerResponse<String> editNotGoods(Account account);

    /**
     * 根据id列表，更新账单信息为已支付
     * @param ids ：以逗号分隔的id字符
     * @param paymentTime ：支付时间
     * @return ：
     */
    ServerResponse<String> batchUpdateStatus(String ids, Long paymentTime);

    /**
     * 更新搜索时间范围内的账单为已支付
     * @param start ：创建时间的起始时间
     * @param end ：创建时间的结束时间
     * @param paymentTime ：账单的结算时间
     * @param currentUserId ：当前用户id
     * @return ：
     */
    ServerResponse<String> batchUpdateStatus(Long start, Long end, Long paymentTime, int currentUserId);
}

